In this document, I explore 4 approaches to SVD with Dimkid data:
- No mean-centering, characters as rows and capacities as columns
- No mean-centering, capacities as rows and characters as columns
- Mean-centering by capacity, characters as rows and capacities as columns (the classic approach)
- Mean-centering by character, capacities as rows and characters as columns
Approach #1
In Approach #1 we proceed without mean-centering, with characters as rows and capacities as columns.
Raw data matrix visualizations
Adults
In this study, 431 US adults rated 21 characters (between-subjects) on 40 capacities (within-subjects). (See Weisman, Dweck, & Markman, 2017, PNAS, Study 4.)

7-9yo children
In this study, 123 7- to 9-year-old US children rated 9 characters (between-subjects) on 20 capacities (within subjects). (See Weisman, Dweck, & Markman, 2018, Proc. CogSci.)

4-6yo children
In this study, 124 4- to 6-year-old US children rated 9 characters (between-subjects) on 20 capacities (within subjects). (See Weisman, Dweck, & Markman, 2018, Proc. CogSci.)

SVD
Adults




Plotting in dimensions


Children, 7-9y




Plotting in dimensions


Children, 4-6y




Plotting in dimensions


Approach #2
In Approach #2 we proceed without mean-centering, with capacities as rows and characters as columns.
Raw data matrix visualizations
Adults
In this study, 431 US adults rated 21 characters (between-subjects) on 40 capacities (within-subjects). (See Weisman, Dweck, & Markman, 2017, PNAS, Study 4.)

7-9yo children
In this study, 123 7- to 9-year-old US children rated 9 characters (between-subjects) on 20 capacities (within subjects). (See Weisman, Dweck, & Markman, 2018, Proc. CogSci.)

4-6yo children
In this study, 124 4- to 6-year-old US children rated 9 characters (between-subjects) on 20 capacities (within subjects). (See Weisman, Dweck, & Markman, 2018, Proc. CogSci.)

SVD
Adults




Plotting in dimensions


Children, 7-9y




Plotting in dimensions


Children, 4-6y




Plotting in dimensions


Approach #3
In Approach #3 we mean-center by capacity, with characters as rows and capacities as columns.
Raw data matrix visualizations
Adults
In this study, 431 US adults rated 21 characters (between-subjects) on 40 capacities (within-subjects). (See Weisman, Dweck, & Markman, 2017, PNAS, Study 4.)

7-9yo children
In this study, 123 7- to 9-year-old US children rated 9 characters (between-subjects) on 20 capacities (within subjects). (See Weisman, Dweck, & Markman, 2018, Proc. CogSci.)

4-6yo children
In this study, 124 4- to 6-year-old US children rated 9 characters (between-subjects) on 20 capacities (within subjects). (See Weisman, Dweck, & Markman, 2018, Proc. CogSci.)

SVD
Adults




Plotting in dimensions


Children, 7-9y




Plotting in dimensions


Children, 4-6y




Plotting in dimensions


Approach #4
In Approach #4 we mean-center by character, with capacities as rows and characters as columns.
Raw data matrix visualizations
Adults
In this study, 431 US adults rated 21 characters (between-subjects) on 40 capacities (within-subjects). (See Weisman, Dweck, & Markman, 2017, PNAS, Study 4.)

7-9yo children
In this study, 123 7- to 9-year-old US children rated 9 characters (between-subjects) on 20 capacities (within subjects). (See Weisman, Dweck, & Markman, 2018, Proc. CogSci.)

4-6yo children
In this study, 124 4- to 6-year-old US children rated 9 characters (between-subjects) on 20 capacities (within subjects). (See Weisman, Dweck, & Markman, 2018, Proc. CogSci.)

SVD
Adults




Plotting in dimensions


Children, 7-9y




Plotting in dimensions


Children, 4-6y




Plotting in dimensions


LS0tCnRpdGxlOiAiRGlta2lkOiBTaW5ndWxhciBWYWx1ZSBEZWNvbXBvc2l0aW9uIChTVkQpIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCi0tLQoKYGBge3IsIGluY2x1ZGUgPSBGfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UpCmBgYAoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShybXMpCmBgYAoKYGBge3IgZGF0YSwgaW5jbHVkZSA9IEZ9CnNldHdkKCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkX3N2ZC9kaW1raWRfc3ZkLyIpCgojIGltcG9ydCBkYXRhCmRfYWQgPC0gcmVhZC5jc3YoIi4vZGF0YS9tZWFuc19hZHVsdHMuY3N2IikgJT4lIAogIG11dGF0ZShYID0gaWZlbHNlKGdyZXBsKCJ2ZWdldGF0aXZlIiwgWCksICJwdnMiLCBhcy5jaGFyYWN0ZXIoWCkpLAogICAgICAgICBYID0gZmFjdG9yKFgsCiAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygic3RhcGxlciIsICJjYXIiLCAiY29tcHV0ZXIiLCAicm9ib3QiLCAibWljcm9iZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlzaCIsICJiZWV0bGUiLCAiYmx1ZV9qYXkiLCAiZnJvZyIsICJtb3VzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ29hdCIsICJkb2ciLCAiYmVhciIsICJkb2xwaGluIiwgImVsZXBoYW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGltcGFuemVlIiwgImZldHVzIiwgInB2cyIsICJpbmZhbnQiLCAiY2hpbGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFkdWx0IikpKSAlPiUKICAgICAgICAgICAgICAgICAgICAjIGxldmVscyA9IGMoImFkdWx0IiwgImNoaWxkIiwgImluZmFudCIsICJwdnMiLCAiZmV0dXMiLAogICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAiY2hpbXBhbnplZSIsICJlbGVwaGFudCIsICJkb2xwaGluIiwgImJlYXIiLAogICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAiZG9nIiwgImdvYXQiLCAibW91c2UiLCAiZnJvZyIsICJibHVlX2pheSIsCiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICJiZWV0bGUiLCAiZmlzaCIsICJtaWNyb2JlIiwgInJvYm90IiwgImNvbXB1dGVyIiwKICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgImNhciIsICJzdGFwbGVyIikpKSAlPiUKICByZW5hbWUoY2hhcmFjdGVyID0gWCkgJT4lCiAgYXJyYW5nZShjaGFyYWN0ZXIpCgpkXzc5IDwtIHJlYWQuY3N2KCIuL2RhdGEvbWVhbnNfNzl5LmNzdiIpICU+JSAKICBtdXRhdGUoWCA9IGZhY3RvcihYLAogICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLCAidGVkZHlfYmVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLCAibW91c2UiLCAiZ29hdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsZXBoYW50IikpKSAlPiUKICAgICAgICAgICAgICAgICAgICAjIGxldmVscyA9IGMoImVsZXBoYW50IiwgImdvYXQiLCAibW91c2UiLCAiYmlyZCIsICJiZWV0bGUiLAogICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAidGVkZHlfYmVhciIsICJkb2xsIiwgInJvYm90IiwgImNvbXB1dGVyIikpKSAlPiUKICByZW5hbWUoY2hhcmFjdGVyID0gWCkgJT4lCiAgYXJyYW5nZShjaGFyYWN0ZXIpCgpkXzQ2IDwtIHJlYWQuY3N2KCIuL2RhdGEvbWVhbnNfNDZ5LmNzdiIpICU+JQogIG11dGF0ZShYID0gZmFjdG9yKFgsCiAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY29tcHV0ZXIiLCAicm9ib3QiLCAiZG9sbCIsICJ0ZWRkeV9iZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGUiLCAiYmlyZCIsICJtb3VzZSIsICJnb2F0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWxlcGhhbnQiKSkpICU+JQogICAgICAgICAgICAgICAgICAgICMgbGV2ZWxzID0gYygiZWxlcGhhbnQiLCAiZ29hdCIsICJtb3VzZSIsICJiaXJkIiwgImJlZXRsZSIsCiAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICJ0ZWRkeV9iZWFyIiwgImRvbGwiLCAicm9ib3QiLCAiY29tcHV0ZXIiKSkpICU+JQogIHJlbmFtZShjaGFyYWN0ZXIgPSBYKSAlPiUKICBhcnJhbmdlKGNoYXJhY3RlcikKYGBgCgpgYGB7ciBuYW1lcywgaW5jbHVkZSA9IEZ9CiMgc2V0IGl0ZW0gYW5kIHByb3BlcnR5IG5hbWVzCmNhcGFjaXR5X25hbWVzX2FkIDwtIG5hbWVzKGRfYWRbLTFdKQpjaGFyYWN0ZXJfbmFtZXNfYWQgPC0gbGV2ZWxzKGRfYWQkY2hhcmFjdGVyKQoKY2FwYWNpdHlfbmFtZXNfY2ggPC0gbmFtZXMoZF83OVstMV0pCmNoYXJhY3Rlcl9uYW1lc19jaCA8LSBsZXZlbHMoZF83OSRjaGFyYWN0ZXIpCmBgYAoKYGBge3IgZnVuY3Rpb25zLCBpbmNsdWRlID0gRn0KbWVhbl9jZW50X2Z1biA8LSBmdW5jdGlvbihkZiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSBjKCJjYXBhY2l0eSIsICJjaGFyYWN0ZXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjKCJhZHVsdHMiLCAiY2hpbGRyZW4iKSl7CiAgCiAgaWYoYWdlX2dyb3VwID09ICJhZHVsdHMiKXsKICAgIGNhcGFjaXR5X25hbWVzID0gY2FwYWNpdHlfbmFtZXNfYWQKICAgIGNoYXJhY3Rlcl9uYW1lcyA9IGNoYXJhY3Rlcl9uYW1lc19hZAogIH0KICBpZihhZ2VfZ3JvdXAgPT0gImNoaWxkcmVuIil7CiAgICBjYXBhY2l0eV9uYW1lcyA9IGNhcGFjaXR5X25hbWVzX2NoCiAgICBjaGFyYWN0ZXJfbmFtZXMgPSBjaGFyYWN0ZXJfbmFtZXNfY2gKICB9CiAgCiAgaWYoYnkgPT0gImNhcGFjaXR5Iil7CiAgICBub3RfYnkgPC0gImNoYXJhY3RlciIKICB9CiAgCiAgaWYoYnkgPT0gImNoYXJhY3RlciIpewogICAgbm90X2J5IDwtICJjYXBhY2l0eSIKICAgICMgZGYgPC0gZGYgJT4lCiAgICAjICAgZ2F0aGVyKGNhcGFjaXR5LCBtZWFuX3JhdGluZywgLWNoYXJhY3RlcikgJT4lCiAgICAjICAgbXV0YXRlKGNhcGFjaXR5ID0gZmFjdG9yKGNhcGFjaXR5LCBsZXZlbHMgPSBjYXBhY2l0eV9uYW1lcykpICU+JQogICAgIyAgIHNwcmVhZChjaGFyYWN0ZXIsIG1lYW5fcmF0aW5nKQogIH0KICAKICBkZl9jZW50IDwtIGRmICU+JQogICAgZ2F0aGVyKGNhcGFjaXR5LCBtZWFuX3JhdGluZywgLWNoYXJhY3RlcikgJT4lCiAgICBncm91cF9ieV8oYXMubmFtZShieSkpICU+JQogICAgbXV0YXRlKGdyb3VwX21lYW4gPSBtZWFuKG1lYW5fcmF0aW5nKSwKICAgICAgICAgICBtZWFuX2NlbnQgPSBtZWFuX3JhdGluZyAtIGdyb3VwX21lYW4pICU+JQogICAgdW5ncm91cCgpICU+JQogICAgc2VsZWN0KC1tZWFuX3JhdGluZywgLWdyb3VwX21lYW4pICU+JQogICAgc3ByZWFkXyhrZXlfY29sID0gYnksCiAgICAgICAgICAgIHZhbHVlX2NvbCA9ICJtZWFuX2NlbnQiKSAlPiUKICAgIGRhdGEuZnJhbWUoKQogIAogIHJldHVybihkZl9jZW50KQp9CgpVX2Z1biA8LSBmdW5jdGlvbihzdmQsCiAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gYygiYWR1bHRzIiwgImNoaWxkcmVuIiksCiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3NlID0gYyhGQUxTRSwgVFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbHkgPSBjKEZBTFNFLCBUUlVFKSl7CgogIGlmKHRyYW5zcG9zZSA9PSBGQUxTRSkgewogICAgaWYoYWdlX2dyb3VwID09ICJhZHVsdHMiKXt5X25hbWVzIDwtIGNoYXJhY3Rlcl9uYW1lc19hZH0KICAgIGlmKGFnZV9ncm91cCA9PSAiY2hpbGRyZW4iKXt5X25hbWVzIDwtIGNoYXJhY3Rlcl9uYW1lc19jaH0KICB9IGVsc2UgaWYodHJhbnNwb3NlID09IFRSVUUpIHsKICAgIGlmKGFnZV9ncm91cCA9PSAiYWR1bHRzIil7eV9uYW1lcyA8LSBjYXBhY2l0eV9uYW1lc19hZH0KICAgIGlmKGFnZV9ncm91cCA9PSAiY2hpbGRyZW4iKXt5X25hbWVzIDwtIGNhcGFjaXR5X25hbWVzX2NofQogIH0gIAogIAogIFMgPC0gc3ZkJGQKCiAgVSA8LSBzdmQkdSAlPiUgCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oInByb3BlcnR5IikgJT4lCiAgICBtdXRhdGUocHJvcGVydHkgPSBhcy5udW1lcmljKHByb3BlcnR5KSwKICAgICAgICAgICBwcm9wZXJ0eSA9IGZhY3Rvcihwcm9wZXJ0eSwgbGFiZWxzID0geV9uYW1lcykpICU+JQogICAgZ2F0aGVyKG1vZGUsIHZhbHVlLCAtcHJvcGVydHkpICU+JQogICAgbXV0YXRlKG1vZGUgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcihnc3ViKCJYIiwgIiIsIG1vZGUpKSksCiAgICAgICAgICAgbW9kZSA9IGlmZWxzZShtb2RlIDwgMTAsIHBhc3RlMCgibW9kZV8wIiwgYXMuY2hhcmFjdGVyKG1vZGUpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoIm1vZGVfIiwgYXMuY2hhcmFjdGVyKG1vZGUpKSkpIAogIAogIGlmKG11bHRpcGx5KXsKICAgICAgVXhTIDwtIFUgJT4lCiAgICAgICAgbXV0YXRlKFMgPSBmYWN0b3IobW9kZSwgbGFiZWxzID0gUyksCiAgICAgICAgICAgICAgIFMgPSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihTKSksCiAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiBTKQogICAgICBkZl9maW5hbCA8LSBVeFMKICB9IGVsc2Uge2RmX2ZpbmFsIDwtIFV9CiAgCiAgcmV0dXJuKGRmX2ZpbmFsKQoKfQoKcGxvdF9VX2Z1biA8LSBmdW5jdGlvbihzdmQsCiAgICAgICAgICAgICAgICAgICAgICAgYWdlX2dyb3VwID0gYygiYWR1bHRzIiwgImNoaWxkcmVuIiksCiAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3NlID0gYyhGQUxTRSwgVFJVRSksCiAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbHkgPSBjKEZBTFNFLCBUUlVFKSl7CgogIGRmX2ZpbmFsIDwtIFVfZnVuKHN2ZCwgYWdlX2dyb3VwLCB0cmFuc3Bvc2UsIG11bHRpcGx5KQogIAogIHBsb3QgPC0gZ2dwbG90KGRmX2ZpbmFsLCBhZXMoeCA9IG1vZGUsIHkgPSBwcm9wZXJ0eSwgZmlsbCA9IHZhbHVlKSkgKwogICAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogICAgIyBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKHZhbHVlLCAyKSwgbnNtYWxsID0gMikpLCBzaXplID0gMykgKwogICAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZEJ1IiwgZGlyZWN0aW9uID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDE1KSkgKwogICAgdGhlbWVfbWluaW1hbCgpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKQogIAogIHJldHVybihwbG90KQp9CgpwbG90X1NfZnVuIDwtIGZ1bmN0aW9uKHN2ZCl7CiAgCiAgUyA8LSBkaWFnKHggPSBzdmQkZCwgbnJvdyA9IGxlbmd0aChzdmQkZCksIG5jb2wgPSBsZW5ndGgoc3ZkJGQpKSAlPiUKICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigibW9kZUEiKSAlPiUKICAgIGdhdGhlcihtb2RlQiwgdmFsdWUsIC1tb2RlQSkgJT4lCiAgICBtdXRhdGUobW9kZUEgPSBpZmVsc2UoYXMubnVtZXJpYyhtb2RlQSkgPCAxMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKCJtb2RlXzAiLCBhcy5jaGFyYWN0ZXIobW9kZUEpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKCJtb2RlXyIsIGFzLmNoYXJhY3Rlcihtb2RlQSkpKSwKICAgICAgICAgICBtb2RlQiA9IGdzdWIoIlgiLCAiIiwgbW9kZUIpLAogICAgICAgICAgIG1vZGVCID0gaWZlbHNlKGFzLm51bWVyaWMobW9kZUIpIDwgMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUwKCJtb2RlXzAiLCBhcy5jaGFyYWN0ZXIobW9kZUIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoIm1vZGVfIiwgYXMuY2hhcmFjdGVyKG1vZGVCKSkpKQogIAogIHBsb3QgPC0gZ2dwbG90KFMsIGFlcyh4ID0gbW9kZUEsIAogICAgICAgICAgICAgICAgICAgICAgICB5ID0gcmVvcmRlcihtb2RlQiwgZGVzYyhtb2RlQikpLCAKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IHZhbHVlKSkgKwogICAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogICAgIyBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKHZhbHVlLCAyKSwgbnNtYWxsID0gMikpLCBzaXplID0gMykgKwogICAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZWRzIiwgZGlyZWN0aW9uID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMTUpKSArCiAgICB0aGVtZV9taW5pbWFsKCkgKwogICAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSkpCiAgCiAgcmV0dXJuKHBsb3QpCn0KClZfZnVuIDwtIGZ1bmN0aW9uKHN2ZCwKICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjKCJhZHVsdHMiLCAiY2hpbGRyZW4iKSwKICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3Bvc2UgPSBjKEZBTFNFLCBUUlVFKSwKICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBseSA9IGMoRkFMU0UsIFRSVUUpKXsKCiAgaWYodHJhbnNwb3NlID09IEZBTFNFKSB7CiAgICBpZihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpe3lfbmFtZXMgPC0gY2FwYWNpdHlfbmFtZXNfYWR9CiAgICBpZihhZ2VfZ3JvdXAgPT0gImNoaWxkcmVuIil7eV9uYW1lcyA8LSBjYXBhY2l0eV9uYW1lc19jaH0KICB9IGVsc2UgaWYodHJhbnNwb3NlID09IFRSVUUpIHsKICAgIGlmKGFnZV9ncm91cCA9PSAiYWR1bHRzIil7eV9uYW1lcyA8LSBjaGFyYWN0ZXJfbmFtZXNfYWR9CiAgICBpZihhZ2VfZ3JvdXAgPT0gImNoaWxkcmVuIil7eV9uYW1lcyA8LSBjaGFyYWN0ZXJfbmFtZXNfY2h9CiAgfQogIAogIFMgPC0gc3ZkJGQKCiAgViA8LSBzdmQkdiAlPiUgCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oIml0ZW0iKSAlPiUKICAgIG11dGF0ZShpdGVtID0gYXMubnVtZXJpYyhpdGVtKSwKICAgICAgICAgICBpdGVtID0gZmFjdG9yKGl0ZW0sIGxhYmVscyA9IHlfbmFtZXMpKSAlPiUKICAgIGdhdGhlcihtb2RlLCB2YWx1ZSwgLWl0ZW0pICU+JQogICAgbXV0YXRlKG1vZGUgPSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcihnc3ViKCJYIiwgIiIsIG1vZGUpKSksCiAgICAgICAgICAgbW9kZSA9IGlmZWxzZShtb2RlIDwgMTAsIHBhc3RlMCgibW9kZV8wIiwgYXMuY2hhcmFjdGVyKG1vZGUpKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoIm1vZGVfIiwgYXMuY2hhcmFjdGVyKG1vZGUpKSkpIAogIAogIGlmKG11bHRpcGx5KXsKICAgICAgVnhTIDwtIFYgJT4lCiAgICAgICAgbXV0YXRlKFMgPSBmYWN0b3IobW9kZSwgbGFiZWxzID0gUyksCiAgICAgICAgICAgICAgIFMgPSBhcy5udW1lcmljKGFzLmNoYXJhY3RlcihTKSksCiAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiBTKQogICAgICBkZl9maW5hbCA8LSBWeFMKICB9IGVsc2Uge2RmX2ZpbmFsIDwtIFZ9CiAgCiAgcmV0dXJuKGRmX2ZpbmFsKQp9CgpwbG90X1ZfZnVuIDwtIGZ1bmN0aW9uKHN2ZCwKICAgICAgICAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBjKCJhZHVsdHMiLCAiY2hpbGRyZW4iKSwKICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3Bvc2UgPSBjKEZBTFNFLCBUUlVFKSwKICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBseSA9IGMoRkFMU0UsIFRSVUUpKXsKCiAgZGZfZmluYWwgPC0gVl9mdW4oc3ZkLCBhZ2VfZ3JvdXAsIHRyYW5zcG9zZSwgbXVsdGlwbHkpCiAgCiAgcGxvdCA8LSBnZ3Bsb3QoZGZfZmluYWwsIGFlcyh4ID0gbW9kZSwgeSA9IGl0ZW0sIGZpbGwgPSB2YWx1ZSkpICsKICAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICAgICMgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZCh2YWx1ZSwgMiksIG5zbWFsbCA9IDIpKSwgc2l6ZSA9IDMpICsKICAgIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRCdSIsIGRpcmVjdGlvbiA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICAgIHRoZW1lX21pbmltYWwoKSArCiAgICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSkKICAKICByZXR1cm4ocGxvdCkKfQoKcmVjb25zdHJ1Y3RfZnVuIDwtIGZ1bmN0aW9uKHN2ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGMoImFkdWx0cyIsICJjaGlsZHJlbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3NlID0gYyhGQUxTRSwgVFJVRSkpewoKICBpZihhZ2VfZ3JvdXAgPT0gImFkdWx0cyIpewogICAgICBjYXBhY2l0eV9uYW1lcyA8LSBjYXBhY2l0eV9uYW1lc19hZAogICAgICBjaGFyYWN0ZXJfbmFtZXMgPC0gY2hhcmFjdGVyX25hbWVzX2FkCiAgfQogIGlmKGFnZV9ncm91cCA9PSAiY2hpbGRyZW4iKXsKICAgICAgY2FwYWNpdHlfbmFtZXMgPC0gY2FwYWNpdHlfbmFtZXNfY2gKICAgICAgY2hhcmFjdGVyX25hbWVzIDwtIGNoYXJhY3Rlcl9uYW1lc19jaAogIH0KICAKICBpZih0cmFuc3Bvc2UgPT0gRkFMU0UpewogICAgeF9uYW1lcyA8LSBjYXBhY2l0eV9uYW1lcwogICAgeV9uYW1lcyA8LSBjaGFyYWN0ZXJfbmFtZXMKICB9CgogIGlmKHRyYW5zcG9zZSA9PSBUUlVFKXsKICAgIHhfbmFtZXMgPC0gY2hhcmFjdGVyX25hbWVzCiAgICB5X25hbWVzIDwtIGNhcGFjaXR5X25hbWVzCiAgfQogIAogICMgY2FsY3VsYXRlIG91dGVyIHByb2R1Y3RzLCBtdWx0aXBseSBieSBzaW5ndWxhciB2YWx1ZQogIE9QIDwtIGxpc3QoKQogIGZvcihpIGluIDE6bGVuZ3RoKHN2ZCRkKSl7CiAgICBPUFtbaV1dIDwtIG91dGVyKHN2ZCR1WyxpXSwgc3ZkJHZbLGldKSAqIHN2ZCRkW2ldCiAgfQogIAogICMgYWRkIHRvZ2V0aGVyCiAgT1Bfc3VtIDwtIFJlZHVjZSgiKyIsIE9QKSAlPiUKICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgIHJvd25hbWVzX3RvX2NvbHVtbigieSIpICU+JQogICAgbXV0YXRlKHkgPSBmYWN0b3IoYXMubnVtZXJpYyh5KSwgbGFiZWxzID0geV9uYW1lcykpICU+JQogICAgZ2F0aGVyKHgsIHZhbHVlLCAteSkgJT4lCiAgICBtdXRhdGUoeCA9IGdzdWIoIlgiLCAiIiwgeCksCiAgICAgICAgICAgeCA9IGZhY3Rvcihhcy5udW1lcmljKHgpLCBsYWJlbHMgPSB4X25hbWVzKSkKICAKICByZXR1cm4oT1Bfc3VtKQp9CgpwbG90X3JlY29uc3RydWN0X2Z1biA8LSBmdW5jdGlvbihzdmQsIAogICAgICAgICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGMoImFkdWx0cyIsICJjaGlsZHJlbiIpLAogICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9zZSA9IGMoRkFMU0UsIFRSVUUpKXsKCiAgT1Bfc3VtIDwtIHJlY29uc3RydWN0X2Z1bihzdmQsIGFnZV9ncm91cCwgdHJhbnNwb3NlKQoKICBwbG90IDwtIGdncGxvdChPUF9zdW0sIGFlcyh4ID0geCwgeSA9IHksIGZpbGwgPSB2YWx1ZSkpICsKICAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICAgICMgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZCh2YWx1ZSwgMiksIG5zbWFsbCA9IDIpKSwgc2l6ZSA9IDMpICsKICAgIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRCdSIsIGRpcmVjdGlvbiA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICAgIHRoZW1lX21pbmltYWwoKSArCiAgICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSkKICAKICByZXR1cm4ocGxvdCkKfQpgYGAKCgpJbiB0aGlzIGRvY3VtZW50LCBJIGV4cGxvcmUgNCBhcHByb2FjaGVzIHRvIFNWRCB3aXRoIERpbWtpZCBkYXRhOgoKMS4gTm8gbWVhbi1jZW50ZXJpbmcsIGNoYXJhY3RlcnMgYXMgcm93cyBhbmQgY2FwYWNpdGllcyBhcyBjb2x1bW5zCjIuIE5vIG1lYW4tY2VudGVyaW5nLCBjYXBhY2l0aWVzIGFzIHJvd3MgYW5kIGNoYXJhY3RlcnMgYXMgY29sdW1ucwozLiBNZWFuLWNlbnRlcmluZyBieSBjYXBhY2l0eSwgY2hhcmFjdGVycyBhcyByb3dzIGFuZCBjYXBhY2l0aWVzIGFzIGNvbHVtbnMgKHRoZSBjbGFzc2ljIGFwcHJvYWNoKQo0LiBNZWFuLWNlbnRlcmluZyBieSBjaGFyYWN0ZXIsIGNhcGFjaXRpZXMgYXMgcm93cyBhbmQgY2hhcmFjdGVycyBhcyBjb2x1bW5zCgojIEFwcHJvYWNoICMxCgpJbiBBcHByb2FjaCAjMSB3ZSBwcm9jZWVkIHdpdGhvdXQgbWVhbi1jZW50ZXJpbmcsIHdpdGggY2hhcmFjdGVycyBhcyByb3dzIGFuZCBjYXBhY2l0aWVzIGFzIGNvbHVtbnMuCgojIyBSYXcgZGF0YSBtYXRyaXggdmlzdWFsaXphdGlvbnMgey50YWJzZXR9CgojIyMgQWR1bHRzCgpJbiB0aGlzIHN0dWR5LCA0MzEgVVMgYWR1bHRzIHJhdGVkIDIxIGNoYXJhY3RlcnMgKGJldHdlZW4tc3ViamVjdHMpIG9uIDQwIGNhcGFjaXRpZXMgKHdpdGhpbi1zdWJqZWN0cykuIChTZWUgV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgMjAxNywgX1BOQVNfLCBTdHVkeSA0LikKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KZF9hZCAlPiUKICBnYXRoZXIoY2FwYWNpdHksIG1lYW5fcmF0aW5nLCAtY2hhcmFjdGVyKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjYXBhY2l0eSwgeSA9IGNoYXJhY3RlciwgZmlsbCA9IG1lYW5fcmF0aW5nKSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJibGFjayIsIGhpZ2ggPSAid2hpdGUiLCAjIGxpbWl0cyA9IGMoLTMsIDMpLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJSYXcgZGF0YTogQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIjIxIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsCiAgICAgICB5ID0gIkNoYXJhY3RlciIsCiAgICAgICBmaWxsID0gIk1lYW4gcmF0aW5nIikKYGBgCgojIyMgNy05eW8gY2hpbGRyZW4KCkluIHRoaXMgc3R1ZHksIDEyMyA3LSB0byA5LXllYXItb2xkIFVTIGNoaWxkcmVuIHJhdGVkIDkgY2hhcmFjdGVycyAoYmV0d2Vlbi1zdWJqZWN0cykgb24gMjAgY2FwYWNpdGllcyAod2l0aGluIHN1YmplY3RzKS4gKFNlZSBXZWlzbWFuLCBEd2VjaywgJiBNYXJrbWFuLCAyMDE4LCBfUHJvYy4gQ29nU2NpXy4pCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmRfNzkgJT4lCiAgZ2F0aGVyKGNhcGFjaXR5LCBtZWFuX3JhdGluZywgLWNoYXJhY3RlcikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHksIHkgPSBjaGFyYWN0ZXIsIGZpbGwgPSBtZWFuX3JhdGluZykpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiYmxhY2siLCBoaWdoID0gIndoaXRlIiwgIyBsaW1pdHMgPSBjKDAsIDEpLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJSYXcgZGF0YTogNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsCiAgICAgICB5ID0gIkNoYXJhY3RlciIsCiAgICAgICBmaWxsID0gIk1lYW4gcmF0aW5nIikKYGBgCgojIyMgNC02eW8gY2hpbGRyZW4KCkluIHRoaXMgc3R1ZHksIDEyNCA0LSB0byA2LXllYXItb2xkIFVTIGNoaWxkcmVuIHJhdGVkIDkgY2hhcmFjdGVycyAoYmV0d2Vlbi1zdWJqZWN0cykgb24gMjAgY2FwYWNpdGllcyAod2l0aGluIHN1YmplY3RzKS4gKFNlZSBXZWlzbWFuLCBEd2VjaywgJiBNYXJrbWFuLCAyMDE4LCBfUHJvYy4gQ29nU2NpXy4pCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CmRfNDYgJT4lCiAgZ2F0aGVyKGNhcGFjaXR5LCBtZWFuX3JhdGluZywgLWNoYXJhY3RlcikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHksIHkgPSBjaGFyYWN0ZXIsIGZpbGwgPSBtZWFuX3JhdGluZykpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiYmxhY2siLCBoaWdoID0gIndoaXRlIiwgIyBsaW1pdHMgPSBjKDAsIDEpLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJSYXcgZGF0YTogNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsCiAgICAgICB5ID0gIkNoYXJhY3RlciIsCiAgICAgICBmaWxsID0gIk1lYW4gcmF0aW5nIikKYGBgCgoKIyMgU1ZEIHsudGFic2V0fQoKIyMjIEFkdWx0cwoKYGBge3J9CnN2ZDFfYWQgPC0gc3ZkKGRfYWQgJT4lIGNvbHVtbl90b19yb3duYW1lcygiY2hhcmFjdGVyIiksIAogICAgICAgICAgICAgICBucm93KGRfYWQpLCBucm93KGRfYWQpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KcGxvdF9yZWNvbnN0cnVjdF9mdW4oc3ZkMV9hZCwgdHJhbnNwb3NlID0gRkFMU0UsICJhZHVsdHMiKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IEFkdWx0cyAoQXBwcm9hY2ggIzEpIiwKICAgICAgIHN1YnRpdGxlID0gIlJlY29uc3RydWN0ZWQgZGF0YXNldDogU3VtIG9mIG91dGVyIHByb2R1Y3RzIChVLCBWKSBtdWx0aXBsaWVkIGJ5IFMiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpwbG90X1VfZnVuKHN2ZDFfYWQsICJhZHVsdHMiLCB0cmFuc3Bvc2UgPSBGQUxTRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMxKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJVOiBGZWF0dXJlIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSB4IFM6IEZlYXR1cmUgdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfU19mdW4oc3ZkMV9hZCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMxKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJTOiBTaW5ndWxhciB2YWx1ZXMgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KcGxvdF9WX2Z1bihzdmQxX2FkLCAiYWR1bHRzIiwgdHJhbnNwb3NlID0gRkFMU0UsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQWR1bHRzIChBcHByb2FjaCAjMSkiLAogICAgICAgc3VidGl0bGUgPSAiVjogSXRlbSB2ZWN0b3JzIChieSBtb2RlKSIsCiAgICAgICAjIHN1YnRpdGxlID0gIlYgeCBTOiBJdGVtIHZlY3RvcnMgbXVsdGlwbGllZCBieSBzaW5ndWxhciB2YWx1ZSAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKIyMjIyBQbG90dGluZyBpbiBkaW1lbnNpb25zIHsudGFic2V0fQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpVX2Z1bihzdmQxX2FkLCAiYWR1bHRzIiwgRkFMU0UsIEZBTFNFKSAlPiUKICBmaWx0ZXIobW9kZSAlaW4lIGMoIm1vZGVfMDEiLCAibW9kZV8wMiIpKSAlPiUKICAjIHNlbGVjdCgtUykgJT4lCiAgc3ByZWFkKG1vZGUsIHZhbHVlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtb2RlXzAxLCB5ID0gbW9kZV8wMiwgbGFiZWwgPSBwcm9wZXJ0eSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMxKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJVOiBDaGFyYWNhdGVycyBpbiBmaXJzdCB0d28gbW9kZXMiLAogICAgICAgIyBzdWJ0aXRsZSA9ICJVIFggUzogQ2hhcmFjYXRlcnMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KVl9mdW4oc3ZkMV9hZCwgImFkdWx0cyIsIEZBTFNFLCBGQUxTRSkgJT4lCiAgZmlsdGVyKG1vZGUgJWluJSBjKCJtb2RlXzAxIiwgIm1vZGVfMDIiKSkgJT4lCiAgIyBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gaXRlbSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMDUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC4wNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IEFkdWx0cyAoQXBwcm9hY2ggIzEpIiwKICAgICAgIHN1YnRpdGxlID0gIlY6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgICMgc3VidGl0bGUgPSAiViBYIFM6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCgojIyMgQ2hpbGRyZW4sIDctOXkKCmBgYHtyfQpzdmQxXzc5IDwtIHN2ZChkXzc5ICU+JSBjb2x1bW5fdG9fcm93bmFtZXMoImNoYXJhY3RlciIpLCAKICAgICAgICAgICAgICAgbnJvdyhkXzc5KSwgbnJvdyhkXzc5KSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CnBsb3RfcmVjb25zdHJ1Y3RfZnVuKHN2ZDFfNzksIHRyYW5zcG9zZSA9IEZBTFNFLCAiY2hpbGRyZW4iKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA3LTl5IChBcHByb2FjaCAjMSkiLAogICAgICAgc3VidGl0bGUgPSAiUmVjb25zdHJ1Y3RlZCBkYXRhc2V0OiBTdW0gb2Ygb3V0ZXIgcHJvZHVjdHMgKFUsIFYpIG11bHRpcGxpZWQgYnkgUyIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfVV9mdW4oc3ZkMV83OSwgImNoaWxkcmVuIiwgdHJhbnNwb3NlID0gRkFMU0UsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDctOXkgKEFwcHJvYWNoICMxKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJVOiBGZWF0dXJlIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSB4IFM6IEZlYXR1cmUgdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfU19mdW4oc3ZkMV83OSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzEpIiwKICAgICAgIHN1YnRpdGxlID0gIlM6IFNpbmd1bGFyIHZhbHVlcyAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjQ5fQpwbG90X1ZfZnVuKHN2ZDFfNzksICJjaGlsZHJlbiIsIHRyYW5zcG9zZSA9IEZBTFNFLCBtdWx0aXBseSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA3LTl5IChBcHByb2FjaCAjMSkiLAogICAgICAgc3VidGl0bGUgPSAiVjogSXRlbSB2ZWN0b3JzIChieSBtb2RlKSIsCiAgICAgICAjIHN1YnRpdGxlID0gIlYgeCBTOiBJdGVtIHZlY3RvcnMgbXVsdGlwbGllZCBieSBzaW5ndWxhciB2YWx1ZSAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKIyMjIyBQbG90dGluZyBpbiBkaW1lbnNpb25zIHsudGFic2V0fQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpVX2Z1bihzdmQxXzc5LCAiY2hpbGRyZW4iLCBGQUxTRSwgRkFMU0UpICU+JQogIGZpbHRlcihtb2RlICVpbiUgYygibW9kZV8wMSIsICJtb2RlXzAyIikpICU+JQogICMgc2VsZWN0KC1TKSAlPiUKICBzcHJlYWQobW9kZSwgdmFsdWUpICU+JQogIGdncGxvdChhZXMoeCA9IG1vZGVfMDEsIHkgPSBtb2RlXzAyLCBsYWJlbCA9IHByb3BlcnR5KSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC4xKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA3LTl5IChBcHByb2FjaCAjMSkiLAogICAgICAgc3VidGl0bGUgPSAiVTogQ2hhcmFjYXRlcnMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSBYIFM6IENoYXJhY2F0ZXJzIGluIGZpcnN0IHR3byBtb2RlcyIsCiAgICAgICB4ID0gIk1vZGUgMSIsIHkgPSAiTW9kZSAyIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClZfZnVuKHN2ZDFfNzksICJjaGlsZHJlbiIsIEZBTFNFLCBGQUxTRSkgJT4lCiAgZmlsdGVyKG1vZGUgJWluJSBjKCJtb2RlXzAxIiwgIm1vZGVfMDIiKSkgJT4lCiAgIyBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gaXRlbSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzEpIiwKICAgICAgIHN1YnRpdGxlID0gIlY6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgICMgc3VidGl0bGUgPSAiViBYIFM6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCgojIyMgQ2hpbGRyZW4sIDQtNnkKCmBgYHtyfQpzdmQxXzQ2IDwtIHN2ZChkXzQ2ICU+JSBjb2x1bW5fdG9fcm93bmFtZXMoImNoYXJhY3RlciIpLCAKICAgICAgICAgICAgICAgbnJvdyhkXzQ2KSwgbnJvdyhkXzQ2KSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CnBsb3RfcmVjb25zdHJ1Y3RfZnVuKHN2ZDFfNDYsIHRyYW5zcG9zZSA9IEZBTFNFLCAiY2hpbGRyZW4iKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjMSkiLAogICAgICAgc3VidGl0bGUgPSAiUmVjb25zdHJ1Y3RlZCBkYXRhc2V0OiBTdW0gb2Ygb3V0ZXIgcHJvZHVjdHMgKFUsIFYpIG11bHRpcGxpZWQgYnkgUyIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfVV9mdW4oc3ZkMV80NiwgImNoaWxkcmVuIiwgdHJhbnNwb3NlID0gRkFMU0UsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDQtNnkgKEFwcHJvYWNoICMxKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJVOiBGZWF0dXJlIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSB4IFM6IEZlYXR1cmUgdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfU19mdW4oc3ZkMV80NikgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzEpIiwKICAgICAgIHN1YnRpdGxlID0gIlM6IFNpbmd1bGFyIHZhbHVlcyAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjQ5fQpwbG90X1ZfZnVuKHN2ZDFfNDYsICJjaGlsZHJlbiIsIHRyYW5zcG9zZSA9IEZBTFNFLCBtdWx0aXBseSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjMSkiLAogICAgICAgc3VidGl0bGUgPSAiVjogSXRlbSB2ZWN0b3JzIChieSBtb2RlKSIsCiAgICAgICAjIHN1YnRpdGxlID0gIlYgeCBTOiBJdGVtIHZlY3RvcnMgbXVsdGlwbGllZCBieSBzaW5ndWxhciB2YWx1ZSAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKIyMjIyBQbG90dGluZyBpbiBkaW1lbnNpb25zIHsudGFic2V0fQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpVX2Z1bihzdmQxXzQ2LCAiY2hpbGRyZW4iLCBGQUxTRSwgRkFMU0UpICU+JQogIGZpbHRlcihtb2RlICVpbiUgYygibW9kZV8wMSIsICJtb2RlXzAyIikpICU+JQogICMgc2VsZWN0KC1TKSAlPiUKICBzcHJlYWQobW9kZSwgdmFsdWUpICU+JQogIGdncGxvdChhZXMoeCA9IG1vZGVfMDEsIHkgPSBtb2RlXzAyLCBsYWJlbCA9IHByb3BlcnR5KSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC4xKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjMSkiLAogICAgICAgc3VidGl0bGUgPSAiVTogQ2hhcmFjYXRlcnMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSBYIFM6IENoYXJhY2F0ZXJzIGluIGZpcnN0IHR3byBtb2RlcyIsCiAgICAgICB4ID0gIk1vZGUgMSIsIHkgPSAiTW9kZSAyIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClZfZnVuKHN2ZDFfNDYsICJjaGlsZHJlbiIsIEZBTFNFLCBGQUxTRSkgJT4lCiAgZmlsdGVyKG1vZGUgJWluJSBjKCJtb2RlXzAxIiwgIm1vZGVfMDIiKSkgJT4lCiAgIyBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gaXRlbSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzEpIiwKICAgICAgIHN1YnRpdGxlID0gIlY6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgICMgc3VidGl0bGUgPSAiViBYIFM6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCgojIEFwcHJvYWNoICMyCgpJbiBBcHByb2FjaCAjMiB3ZSBwcm9jZWVkIHdpdGhvdXQgbWVhbi1jZW50ZXJpbmcsIHdpdGggY2FwYWNpdGllcyBhcyByb3dzIGFuZCBjaGFyYWN0ZXJzIGFzIGNvbHVtbnMuCgojIyBSYXcgZGF0YSBtYXRyaXggdmlzdWFsaXphdGlvbnMgey50YWJzZXR9CgojIyMgQWR1bHRzCgpJbiB0aGlzIHN0dWR5LCA0MzEgVVMgYWR1bHRzIHJhdGVkIDIxIGNoYXJhY3RlcnMgKGJldHdlZW4tc3ViamVjdHMpIG9uIDQwIGNhcGFjaXRpZXMgKHdpdGhpbi1zdWJqZWN0cykuIChTZWUgV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgMjAxNywgX1BOQVNfLCBTdHVkeSA0LikKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS43OX0KZF9hZCAlPiUKICBnYXRoZXIoY2FwYWNpdHksIG1lYW5fcmF0aW5nLCAtY2hhcmFjdGVyKSAlPiUKICBnZ3Bsb3QoYWVzKHkgPSBjYXBhY2l0eSwgeCA9IGNoYXJhY3RlciwgZmlsbCA9IG1lYW5fcmF0aW5nKSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJibGFjayIsIGhpZ2ggPSAid2hpdGUiLCAjIGxpbWl0cyA9IGMoLTMsIDMpLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJSYXcgZGF0YTogQWR1bHRzIiwKICAgICAgIHN1YnRpdGxlID0gIjIxIGNoYXJhY3RlcnMsIDQwIGNhcGFjaXRpZXMiLAogICAgICAgeSA9ICJDYXBhY2l0eSIsCiAgICAgICB4ID0gIkNoYXJhY3RlciIsCiAgICAgICBmaWxsID0gIk1lYW4gcmF0aW5nIikKYGBgCgojIyMgNy05eW8gY2hpbGRyZW4KCkluIHRoaXMgc3R1ZHksIDEyMyA3LSB0byA5LXllYXItb2xkIFVTIGNoaWxkcmVuIHJhdGVkIDkgY2hhcmFjdGVycyAoYmV0d2Vlbi1zdWJqZWN0cykgb24gMjAgY2FwYWNpdGllcyAod2l0aGluIHN1YmplY3RzKS4gKFNlZSBXZWlzbWFuLCBEd2VjaywgJiBNYXJrbWFuLCAyMDE4LCBfUHJvYy4gQ29nU2NpXy4pCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEuNDl9CmRfNzkgJT4lCiAgZ2F0aGVyKGNhcGFjaXR5LCBtZWFuX3JhdGluZywgLWNoYXJhY3RlcikgJT4lCiAgZ2dwbG90KGFlcyh5ID0gY2FwYWNpdHksIHggPSBjaGFyYWN0ZXIsIGZpbGwgPSBtZWFuX3JhdGluZykpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiYmxhY2siLCBoaWdoID0gIndoaXRlIiwgIyBsaW1pdHMgPSBjKDAsIDEpLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJSYXcgZGF0YTogNy0gdG8gOS15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMiLAogICAgICAgeSA9ICJDYXBhY2l0eSIsCiAgICAgICB4ID0gIkNoYXJhY3RlciIsCiAgICAgICBmaWxsID0gIk1lYW4gcmF0aW5nIikKYGBgCgojIyMgNC02eW8gY2hpbGRyZW4KCkluIHRoaXMgc3R1ZHksIDEyNCA0LSB0byA2LXllYXItb2xkIFVTIGNoaWxkcmVuIHJhdGVkIDkgY2hhcmFjdGVycyAoYmV0d2Vlbi1zdWJqZWN0cykgb24gMjAgY2FwYWNpdGllcyAod2l0aGluIHN1YmplY3RzKS4gKFNlZSBXZWlzbWFuLCBEd2VjaywgJiBNYXJrbWFuLCAyMDE4LCBfUHJvYy4gQ29nU2NpXy4pCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEuNDl9CmRfNDYgJT4lCiAgZ2F0aGVyKGNhcGFjaXR5LCBtZWFuX3JhdGluZywgLWNoYXJhY3RlcikgJT4lCiAgZ2dwbG90KGFlcyh5ID0gY2FwYWNpdHksIHggPSBjaGFyYWN0ZXIsIGZpbGwgPSBtZWFuX3JhdGluZykpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiYmxhY2siLCBoaWdoID0gIndoaXRlIiwgIyBsaW1pdHMgPSBjKDAsIDEpLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJSYXcgZGF0YTogNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMiLAogICAgICAgeSA9ICJDYXBhY2l0eSIsCiAgICAgICB4ID0gIkNoYXJhY3RlciIsCiAgICAgICBmaWxsID0gIk1lYW4gcmF0aW5nIikKYGBgCgoKIyMgU1ZEIHsudGFic2V0fQoKIyMjIEFkdWx0cwoKYGBge3J9CnN2ZDJfYWQgPC0gc3ZkKGRfYWQgJT4lIGNvbHVtbl90b19yb3duYW1lcygiY2hhcmFjdGVyIikgJT4lIHQoKSwgCiAgICAgICAgICAgICAgIG5yb3coZF9hZCksIG5yb3coZF9hZCkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjQ5fQpwbG90X3JlY29uc3RydWN0X2Z1bihzdmQyX2FkLCAiYWR1bHRzIiwgVFJVRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZWNvbnN0cnVjdGVkIGRhdGFzZXQ6IFN1bSBvZiBvdXRlciBwcm9kdWN0cyAoVSwgVikgbXVsdGlwbGllZCBieSBTIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KcGxvdF9VX2Z1bihzdmQyX2FkLCAiYWR1bHRzIiwgdHJhbnNwb3NlID0gVFJVRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJVOiBGZWF0dXJlIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSB4IFM6IEZlYXR1cmUgdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfU19mdW4oc3ZkMl9hZCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJTOiBTaW5ndWxhciB2YWx1ZXMgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KcGxvdF9WX2Z1bihzdmQyX2FkLCAiYWR1bHRzIiwgdHJhbnNwb3NlID0gVFJVRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJWOiBJdGVtIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiViB4IFM6IEl0ZW0gdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgojIyMjIFBsb3R0aW5nIGluIGRpbWVuc2lvbnMgey50YWJzZXR9CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClVfZnVuKHN2ZDJfYWQsICJhZHVsdHMiLCBUUlVFLCBUUlVFKSAlPiUKICBmaWx0ZXIobW9kZSAlaW4lIGMoIm1vZGVfMDEiLCAibW9kZV8wMiIpKSAlPiUKICBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gcHJvcGVydHkpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMykpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMykpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IEFkdWx0cyAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlUgWCBTOiBDYXBhY2l0aWVzIGluIGZpcnN0IHR3byBtb2RlcyIsCiAgICAgICB4ID0gIk1vZGUgMSIsIHkgPSAiTW9kZSAyIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClZfZnVuKHN2ZDJfYWQsICJhZHVsdHMiLCBUUlVFLCBUUlVFKSAlPiUKICBmaWx0ZXIobW9kZSAlaW4lIGMoIm1vZGVfMDEiLCAibW9kZV8wMiIpKSAlPiUKICBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gaXRlbSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAzKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAzKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgIyBjb29yZF9lcXVhbCgpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQWR1bHRzIChBcHByb2FjaCAjMikiLAogICAgICAgc3VidGl0bGUgPSAiViBYIFM6IENoYXJhY3RlcnMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCgojIyMgQ2hpbGRyZW4sIDctOXkKCmBgYHtyfQpzdmQyXzc5IDwtIHN2ZChkXzc5ICU+JSBjb2x1bW5fdG9fcm93bmFtZXMoImNoYXJhY3RlciIpICU+JSB0KCksIAogICAgICAgICAgICAgICBucm93KGRfNzkpLCBucm93KGRfNzkpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KcGxvdF9yZWNvbnN0cnVjdF9mdW4oc3ZkMl83OSwgImNoaWxkcmVuIiwgVFJVRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlJlY29uc3RydWN0ZWQgZGF0YXNldDogU3VtIG9mIG91dGVyIHByb2R1Y3RzIChVLCBWKSBtdWx0aXBsaWVkIGJ5IFMiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjQ5fQpwbG90X1VfZnVuKHN2ZDJfNzksICJjaGlsZHJlbiIsIHRyYW5zcG9zZSA9IFRSVUUsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDctOXkgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJVOiBGZWF0dXJlIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSB4IFM6IEZlYXR1cmUgdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfU19mdW4oc3ZkMl83OSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlM6IFNpbmd1bGFyIHZhbHVlcyAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpwbG90X1ZfZnVuKHN2ZDJfNzksICJjaGlsZHJlbiIsIHRyYW5zcG9zZSA9IFRSVUUsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDctOXkgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJWOiBJdGVtIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiViB4IFM6IEl0ZW0gdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgojIyMjIFBsb3R0aW5nIGluIGRpbWVuc2lvbnMgey50YWJzZXR9CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClVfZnVuKHN2ZDJfNzksICJjaGlsZHJlbiIsIFRSVUUsIFRSVUUpICU+JQogIGZpbHRlcihtb2RlICVpbiUgYygibW9kZV8wMSIsICJtb2RlXzAyIikpICU+JQogIHNlbGVjdCgtUykgJT4lCiAgc3ByZWFkKG1vZGUsIHZhbHVlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtb2RlXzAxLCB5ID0gbW9kZV8wMiwgbGFiZWwgPSBwcm9wZXJ0eSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuNSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlUgWCBTOiBDYXBhY2l0aWVzIGluIGZpcnN0IHR3byBtb2RlcyIsCiAgICAgICB4ID0gIk1vZGUgMSIsIHkgPSAiTW9kZSAyIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClZfZnVuKHN2ZDJfNzksICJjaGlsZHJlbiIsIFRSVUUsIFRSVUUpICU+JQogIGZpbHRlcihtb2RlICVpbiUgYygibW9kZV8wMSIsICJtb2RlXzAyIikpICU+JQogIHNlbGVjdCgtUykgJT4lCiAgc3ByZWFkKG1vZGUsIHZhbHVlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtb2RlXzAxLCB5ID0gbW9kZV8wMiwgbGFiZWwgPSBpdGVtKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA3LTl5IChBcHByb2FjaCAjMikiLAogICAgICAgc3VidGl0bGUgPSAiViBYIFM6IENoYXJhY3RlcnMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCgojIyMgQ2hpbGRyZW4sIDQtNnkKCmBgYHtyfQpzdmQyXzQ2IDwtIHN2ZChkXzQ2ICU+JSBjb2x1bW5fdG9fcm93bmFtZXMoImNoYXJhY3RlciIpICU+JSB0KCksIAogICAgICAgICAgICAgICBucm93KGRfNDYpLCBucm93KGRfNDYpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KcGxvdF9yZWNvbnN0cnVjdF9mdW4oc3ZkMl80NiwgImNoaWxkcmVuIiwgVFJVRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlJlY29uc3RydWN0ZWQgZGF0YXNldDogU3VtIG9mIG91dGVyIHByb2R1Y3RzIChVLCBWKSBtdWx0aXBsaWVkIGJ5IFMiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjQ5fQpwbG90X1VfZnVuKHN2ZDJfNDYsICJjaGlsZHJlbiIsIHRyYW5zcG9zZSA9IFRSVUUsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDQtNnkgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJVOiBGZWF0dXJlIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSB4IFM6IEZlYXR1cmUgdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfU19mdW4oc3ZkMl80NikgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlM6IFNpbmd1bGFyIHZhbHVlcyAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpwbG90X1ZfZnVuKHN2ZDJfNDYsICJjaGlsZHJlbiIsIHRyYW5zcG9zZSA9IFRSVUUsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDQtNnkgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJWOiBJdGVtIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiViB4IFM6IEl0ZW0gdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgojIyMjIFBsb3R0aW5nIGluIGRpbWVuc2lvbnMgey50YWJzZXR9CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClVfZnVuKHN2ZDJfNDYsICJjaGlsZHJlbiIsIFRSVUUsIFRSVUUpICU+JQogIGZpbHRlcihtb2RlICVpbiUgYygibW9kZV8wMSIsICJtb2RlXzAyIikpICU+JQogIHNlbGVjdCgtUykgJT4lCiAgc3ByZWFkKG1vZGUsIHZhbHVlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtb2RlXzAxLCB5ID0gbW9kZV8wMiwgbGFiZWwgPSBwcm9wZXJ0eSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC4yNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjMikiLAogICAgICAgc3VidGl0bGUgPSAiVSBYIFM6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KVl9mdW4oc3ZkMl80NiwgImNoaWxkcmVuIiwgVFJVRSwgVFJVRSkgJT4lCiAgZmlsdGVyKG1vZGUgJWluJSBjKCJtb2RlXzAxIiwgIm1vZGVfMDIiKSkgJT4lCiAgc2VsZWN0KC1TKSAlPiUKICBzcHJlYWQobW9kZSwgdmFsdWUpICU+JQogIGdncGxvdChhZXMoeCA9IG1vZGVfMDEsIHkgPSBtb2RlXzAyLCBsYWJlbCA9IGl0ZW0pKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjI1KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlYgWCBTOiBDaGFyYWN0ZXJzIGluIGZpcnN0IHR3byBtb2RlcyIsCiAgICAgICB4ID0gIk1vZGUgMSIsIHkgPSAiTW9kZSAyIikKYGBgCgoKIyBBcHByb2FjaCAjMwoKSW4gQXBwcm9hY2ggIzMgd2UgbWVhbi1jZW50ZXIgYnkgY2FwYWNpdHksIHdpdGggY2hhcmFjdGVycyBhcyByb3dzIGFuZCBjYXBhY2l0aWVzIGFzIGNvbHVtbnMuCgojIyBSYXcgZGF0YSBtYXRyaXggdmlzdWFsaXphdGlvbnMgey50YWJzZXR9CgojIyMgQWR1bHRzCgpJbiB0aGlzIHN0dWR5LCA0MzEgVVMgYWR1bHRzIHJhdGVkIDIxIGNoYXJhY3RlcnMgKGJldHdlZW4tc3ViamVjdHMpIG9uIDQwIGNhcGFjaXRpZXMgKHdpdGhpbi1zdWJqZWN0cykuIChTZWUgV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgMjAxNywgX1BOQVNfLCBTdHVkeSA0LikKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KZF9hZCAlPiUKICBtZWFuX2NlbnRfZnVuKGJ5ID0gImNhcGFjaXR5IiwgYWdlX2dyb3VwID0gImFkdWx0cyIpICU+JQogIGdhdGhlcihjYXBhY2l0eSwgbWVhbl9jZW50LCAtY2hhcmFjdGVyKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBjYXBhY2l0eSwgeSA9IGNoYXJhY3RlciwgZmlsbCA9IG1lYW5fY2VudCkpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiYmxhY2siLCBoaWdoID0gIndoaXRlIiwgIyBsaW1pdHMgPSBjKC02LCA2KSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSkgKwogIGxhYnModGl0bGUgPSAiUmF3IGRhdGE6IEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICIyMSBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzIiwKICAgICAgIHggPSAiQ2FwYWNpdHkiLAogICAgICAgeSA9ICJDaGFyYWN0ZXIiLAogICAgICAgZmlsbCA9ICJNZWFuIHJhdGluZyIpCmBgYAoKIyMjIDctOXlvIGNoaWxkcmVuCgpJbiB0aGlzIHN0dWR5LCAxMjMgNy0gdG8gOS15ZWFyLW9sZCBVUyBjaGlsZHJlbiByYXRlZCA5IGNoYXJhY3RlcnMgKGJldHdlZW4tc3ViamVjdHMpIG9uIDIwIGNhcGFjaXRpZXMgKHdpdGhpbiBzdWJqZWN0cykuIChTZWUgV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgMjAxOCwgX1Byb2MuIENvZ1NjaV8uKQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpkXzc5ICU+JQogIG1lYW5fY2VudF9mdW4oYnkgPSAiY2FwYWNpdHkiLCBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW4iKSAlPiUKICBnYXRoZXIoY2FwYWNpdHksIG1lYW5fY2VudCwgLWNoYXJhY3RlcikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY2FwYWNpdHksIHkgPSBjaGFyYWN0ZXIsIGZpbGwgPSBtZWFuX2NlbnQpKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gImJsYWNrIiwgaGlnaCA9ICJ3aGl0ZSIsICMgbGltaXRzID0gYygtMiwgMiksCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSkpICsKICBsYWJzKHRpdGxlID0gIlJhdyBkYXRhOiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjkgY2hhcmFjdGVycywgMjAgY2FwYWNpdGllcyIsCiAgICAgICB4ID0gIkNhcGFjaXR5IiwKICAgICAgIHkgPSAiQ2hhcmFjdGVyIiwKICAgICAgIGZpbGwgPSAiTWVhbiByYXRpbmciKQpgYGAKCiMjIyA0LTZ5byBjaGlsZHJlbgoKSW4gdGhpcyBzdHVkeSwgMTI0IDQtIHRvIDYteWVhci1vbGQgVVMgY2hpbGRyZW4gcmF0ZWQgOSBjaGFyYWN0ZXJzIChiZXR3ZWVuLXN1YmplY3RzKSBvbiAyMCBjYXBhY2l0aWVzICh3aXRoaW4gc3ViamVjdHMpLiAoU2VlIFdlaXNtYW4sIER3ZWNrLCAmIE1hcmttYW4sIDIwMTgsIF9Qcm9jLiBDb2dTY2lfLikKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KZF80NiAlPiUKICBtZWFuX2NlbnRfZnVuKGJ5ID0gImNhcGFjaXR5IiwgYWdlX2dyb3VwID0gImNoaWxkcmVuIikgJT4lCiAgZ2F0aGVyKGNhcGFjaXR5LCBtZWFuX2NlbnQsIC1jaGFyYWN0ZXIpICU+JQogIGdncGxvdChhZXMoeCA9IGNhcGFjaXR5LCB5ID0gY2hhcmFjdGVyLCBmaWxsID0gbWVhbl9jZW50KSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJibGFjayIsIGhpZ2ggPSAid2hpdGUiLCAjIGxpbWl0cyA9IGMoLTIsIDIpLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJSYXcgZGF0YTogNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMiLAogICAgICAgeCA9ICJDYXBhY2l0eSIsCiAgICAgICB5ID0gIkNoYXJhY3RlciIsCiAgICAgICBmaWxsID0gIk1lYW4gcmF0aW5nIikKYGBgCgoKIyMgU1ZEIHsudGFic2V0fQoKIyMjIEFkdWx0cwoKYGBge3J9CnN2ZDNfYWQgPC0gc3ZkKGRfYWQgJT4lCiAgICAgICAgICAgICAgICAgbWVhbl9jZW50X2Z1bigiY2FwYWNpdHkiLCBhZ2VfZ3JvdXAgPSAiYWR1bHRzIikgJT4lCiAgICAgICAgICAgICAgICAgY29sdW1uX3RvX3Jvd25hbWVzKCJjaGFyYWN0ZXIiKSwKICAgICAgICAgICAgICAgbnJvdyhkX2FkKSwgbnJvdyhkX2FkKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9CnBsb3RfcmVjb25zdHJ1Y3RfZnVuKHN2ZDNfYWQsIHRyYW5zcG9zZSA9IEZBTFNFLCAiYWR1bHRzIikgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMzKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZWNvbnN0cnVjdGVkIGRhdGFzZXQ6IFN1bSBvZiBvdXRlciBwcm9kdWN0cyAoVSwgVikgbXVsdGlwbGllZCBieSBTIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KcGxvdF9VX2Z1bihzdmQzX2FkLCAiYWR1bHRzIiwgdHJhbnNwb3NlID0gRkFMU0UsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQWR1bHRzIChBcHByb2FjaCAjMykiLAogICAgICAgc3VidGl0bGUgPSAiVTogRmVhdHVyZSB2ZWN0b3JzIChieSBtb2RlKSIsCiAgICAgICAjIHN1YnRpdGxlID0gIlUgeCBTOiBGZWF0dXJlIHZlY3RvcnMgbXVsdGlwbGllZCBieSBzaW5ndWxhciB2YWx1ZSAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpwbG90X1NfZnVuKHN2ZDNfYWQpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQWR1bHRzIChBcHByb2FjaCAjMykiLAogICAgICAgc3VidGl0bGUgPSAiUzogU2luZ3VsYXIgdmFsdWVzIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEuNDl9CnBsb3RfVl9mdW4oc3ZkM19hZCwgImFkdWx0cyIsIHRyYW5zcG9zZSA9IEZBTFNFLCBtdWx0aXBseSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IEFkdWx0cyAoQXBwcm9hY2ggIzMpIiwKICAgICAgIHN1YnRpdGxlID0gIlY6IEl0ZW0gdmVjdG9ycyAoYnkgbW9kZSkiLAogICAgICAgIyBzdWJ0aXRsZSA9ICJWIHggUzogSXRlbSB2ZWN0b3JzIG11bHRpcGxpZWQgYnkgc2luZ3VsYXIgdmFsdWUgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCiMjIyMgUGxvdHRpbmcgaW4gZGltZW5zaW9ucyB7LnRhYnNldH0KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KVV9mdW4oc3ZkM19hZCwgImFkdWx0cyIsIEZBTFNFLCBUUlVFKSAlPiUKICBmaWx0ZXIobW9kZSAlaW4lIGMoIm1vZGVfMDEiLCAibW9kZV8wMiIpKSAlPiUKICBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gcHJvcGVydHkpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMykpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMykpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IEFkdWx0cyAoQXBwcm9hY2ggIzMpIiwKICAgICAgIHN1YnRpdGxlID0gIlUgWCBTOiBDaGFyYWNhdGVycyBpbiBmaXJzdCB0d28gbW9kZXMiLAogICAgICAgeCA9ICJNb2RlIDEiLCB5ID0gIk1vZGUgMiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpWX2Z1bihzdmQzX2FkLCAiYWR1bHRzIiwgRkFMU0UsIFRSVUUpICU+JQogIGZpbHRlcihtb2RlICVpbiUgYygibW9kZV8wMSIsICJtb2RlXzAyIikpICU+JQogIHNlbGVjdCgtUykgJT4lCiAgc3ByZWFkKG1vZGUsIHZhbHVlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtb2RlXzAxLCB5ID0gbW9kZV8wMiwgbGFiZWwgPSBpdGVtKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDMpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIDMpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJWIFggUzogQ2FwYWNpdGllcyBpbiBmaXJzdCB0d28gbW9kZXMiLAogICAgICAgeCA9ICJNb2RlIDEiLCB5ID0gIk1vZGUgMiIpCmBgYAoKCiMjIyBDaGlsZHJlbiwgNy05eQoKYGBge3J9CnN2ZDNfNzkgPC0gc3ZkKGRfNzkgJT4lCiAgICAgICAgICAgICAgICAgbWVhbl9jZW50X2Z1bigiY2FwYWNpdHkiLCBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW4iKSAlPiUKICAgICAgICAgICAgICAgICBjb2x1bW5fdG9fcm93bmFtZXMoImNoYXJhY3RlciIpLAogICAgICAgICAgICAgICBucm93KGRfNzkpLCBucm93KGRfNzkpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KcGxvdF9yZWNvbnN0cnVjdF9mdW4oc3ZkM183OSwgdHJhbnNwb3NlID0gRkFMU0UsICJjaGlsZHJlbiIpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDctOXkgKEFwcHJvYWNoICMzKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZWNvbnN0cnVjdGVkIGRhdGFzZXQ6IFN1bSBvZiBvdXRlciBwcm9kdWN0cyAoVSwgVikgbXVsdGlwbGllZCBieSBTIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KcGxvdF9VX2Z1bihzdmQzXzc5LCAiY2hpbGRyZW4iLCB0cmFuc3Bvc2UgPSBGQUxTRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzMpIiwKICAgICAgIHN1YnRpdGxlID0gIlU6IEZlYXR1cmUgdmVjdG9ycyAoYnkgbW9kZSkiLAogICAgICAgIyBzdWJ0aXRsZSA9ICJVIHggUzogRmVhdHVyZSB2ZWN0b3JzIG11bHRpcGxpZWQgYnkgc2luZ3VsYXIgdmFsdWUgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KcGxvdF9TX2Z1bihzdmQzXzc5KSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA3LTl5IChBcHByb2FjaCAjMykiLAogICAgICAgc3VidGl0bGUgPSAiUzogU2luZ3VsYXIgdmFsdWVzIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEuNDl9CnBsb3RfVl9mdW4oc3ZkM183OSwgImNoaWxkcmVuIiwgdHJhbnNwb3NlID0gRkFMU0UsIG11bHRpcGx5ID0gRkFMU0UpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDctOXkgKEFwcHJvYWNoICMzKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJWOiBJdGVtIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiViB4IFM6IEl0ZW0gdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgojIyMjIFBsb3R0aW5nIGluIGRpbWVuc2lvbnMgey50YWJzZXR9CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClVfZnVuKHN2ZDNfNzksICJjaGlsZHJlbiIsIEZBTFNFLCBUUlVFKSAlPiUKICBmaWx0ZXIobW9kZSAlaW4lIGMoIm1vZGVfMDEiLCAibW9kZV8wMiIpKSAlPiUKICBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gcHJvcGVydHkpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjI1KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzMpIiwKICAgICAgIHN1YnRpdGxlID0gIlUgWCBTOiBDaGFyYWNhdGVycyBpbiBmaXJzdCB0d28gbW9kZXMiLAogICAgICAgeCA9ICJNb2RlIDEiLCB5ID0gIk1vZGUgMiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpWX2Z1bihzdmQzXzc5LCAiY2hpbGRyZW4iLCBGQUxTRSwgVFJVRSkgJT4lCiAgZmlsdGVyKG1vZGUgJWluJSBjKCJtb2RlXzAxIiwgIm1vZGVfMDIiKSkgJT4lCiAgc2VsZWN0KC1TKSAlPiUKICBzcHJlYWQobW9kZSwgdmFsdWUpICU+JQogIGdncGxvdChhZXMoeCA9IG1vZGVfMDEsIHkgPSBtb2RlXzAyLCBsYWJlbCA9IGl0ZW0pKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjI1KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlYgWCBTOiBDYXBhY2l0aWVzIGluIGZpcnN0IHR3byBtb2RlcyIsCiAgICAgICB4ID0gIk1vZGUgMSIsIHkgPSAiTW9kZSAyIikKYGBgCgoKIyMjIENoaWxkcmVuLCA0LTZ5CgpgYGB7cn0Kc3ZkM180NiA8LSBzdmQoZF80NiAlPiUKICAgICAgICAgICAgICAgICBtZWFuX2NlbnRfZnVuKCJjYXBhY2l0eSIsIGFnZV9ncm91cCA9ICJjaGlsZHJlbiIpICU+JQogICAgICAgICAgICAgICAgIGNvbHVtbl90b19yb3duYW1lcygiY2hhcmFjdGVyIiksCiAgICAgICAgICAgICAgIG5yb3coZF80NiksIG5yb3coZF80NikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpwbG90X3JlY29uc3RydWN0X2Z1bihzdmQzXzQ2LCB0cmFuc3Bvc2UgPSBGQUxTRSwgImNoaWxkcmVuIikgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzMpIiwKICAgICAgIHN1YnRpdGxlID0gIlJlY29uc3RydWN0ZWQgZGF0YXNldDogU3VtIG9mIG91dGVyIHByb2R1Y3RzIChVLCBWKSBtdWx0aXBsaWVkIGJ5IFMiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpwbG90X1VfZnVuKHN2ZDNfNDYsICJjaGlsZHJlbiIsIHRyYW5zcG9zZSA9IEZBTFNFLCBtdWx0aXBseSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjMykiLAogICAgICAgc3VidGl0bGUgPSAiVTogRmVhdHVyZSB2ZWN0b3JzIChieSBtb2RlKSIsCiAgICAgICAjIHN1YnRpdGxlID0gIlUgeCBTOiBGZWF0dXJlIHZlY3RvcnMgbXVsdGlwbGllZCBieSBzaW5ndWxhciB2YWx1ZSAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpwbG90X1NfZnVuKHN2ZDNfNDYpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDQtNnkgKEFwcHJvYWNoICMzKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJTOiBTaW5ndWxhciB2YWx1ZXMgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KcGxvdF9WX2Z1bihzdmQzXzQ2LCAiY2hpbGRyZW4iLCB0cmFuc3Bvc2UgPSBGQUxTRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzMpIiwKICAgICAgIHN1YnRpdGxlID0gIlY6IEl0ZW0gdmVjdG9ycyAoYnkgbW9kZSkiLAogICAgICAgIyBzdWJ0aXRsZSA9ICJWIHggUzogSXRlbSB2ZWN0b3JzIG11bHRpcGxpZWQgYnkgc2luZ3VsYXIgdmFsdWUgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCiMjIyMgUGxvdHRpbmcgaW4gZGltZW5zaW9ucyB7LnRhYnNldH0KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KVV9mdW4oc3ZkM180NiwgImNoaWxkcmVuIiwgRkFMU0UsIFRSVUUpICU+JQogIGZpbHRlcihtb2RlICVpbiUgYygibW9kZV8wMSIsICJtb2RlXzAyIikpICU+JQogIHNlbGVjdCgtUykgJT4lCiAgc3ByZWFkKG1vZGUsIHZhbHVlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtb2RlXzAxLCB5ID0gbW9kZV8wMiwgbGFiZWwgPSBwcm9wZXJ0eSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC4yNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjMykiLAogICAgICAgc3VidGl0bGUgPSAiVSBYIFM6IENoYXJhY2F0ZXJzIGluIGZpcnN0IHR3byBtb2RlcyIsCiAgICAgICB4ID0gIk1vZGUgMSIsIHkgPSAiTW9kZSAyIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClZfZnVuKHN2ZDNfNDYsICJjaGlsZHJlbiIsIEZBTFNFLCBUUlVFKSAlPiUKICBmaWx0ZXIobW9kZSAlaW4lIGMoIm1vZGVfMDEiLCAibW9kZV8wMiIpKSAlPiUKICBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gaXRlbSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC4yNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjMikiLAogICAgICAgc3VidGl0bGUgPSAiViBYIFM6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCgojIEFwcHJvYWNoICM0CgpJbiBBcHByb2FjaCAjNCB3ZSBtZWFuLWNlbnRlciBieSBjaGFyYWN0ZXIsIHdpdGggY2FwYWNpdGllcyBhcyByb3dzIGFuZCBjaGFyYWN0ZXJzIGFzIGNvbHVtbnMuCgojIyBSYXcgZGF0YSBtYXRyaXggdmlzdWFsaXphdGlvbnMgey50YWJzZXR9CgojIyMgQWR1bHRzCgpJbiB0aGlzIHN0dWR5LCA0MzEgVVMgYWR1bHRzIHJhdGVkIDIxIGNoYXJhY3RlcnMgKGJldHdlZW4tc3ViamVjdHMpIG9uIDQwIGNhcGFjaXRpZXMgKHdpdGhpbi1zdWJqZWN0cykuIChTZWUgV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgMjAxNywgX1BOQVNfLCBTdHVkeSA0LikKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KZF9hZCAlPiUKICBtZWFuX2NlbnRfZnVuKCJjaGFyYWN0ZXIiLCBhZ2VfZ3JvdXAgPSAiYWR1bHRzIikgJT4lCiAgZ2F0aGVyKGNoYXJhY3RlciwgbWVhbl9jZW50LCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLCBsZXZlbHMgPSBjaGFyYWN0ZXJfbmFtZXNfYWQpKSAlPiUKICBnZ3Bsb3QoYWVzKHkgPSBjYXBhY2l0eSwgeCA9IGNoYXJhY3RlciwgZmlsbCA9IG1lYW5fY2VudCkpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiYmxhY2siLCBoaWdoID0gIndoaXRlIiwgIyBsaW1pdHMgPSBjKC0zLCAzKSwKICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMTUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMC41KSkgKwogIGxhYnModGl0bGUgPSAiUmF3IGRhdGE6IEFkdWx0cyIsCiAgICAgICBzdWJ0aXRsZSA9ICIyMSBjaGFyYWN0ZXJzLCA0MCBjYXBhY2l0aWVzIiwKICAgICAgIHkgPSAiQ2FwYWNpdHkiLAogICAgICAgeCA9ICJDaGFyYWN0ZXIiLAogICAgICAgZmlsbCA9ICJNZWFuIHJhdGluZyIpCmBgYAoKIyMjIDctOXlvIGNoaWxkcmVuCgpJbiB0aGlzIHN0dWR5LCAxMjMgNy0gdG8gOS15ZWFyLW9sZCBVUyBjaGlsZHJlbiByYXRlZCA5IGNoYXJhY3RlcnMgKGJldHdlZW4tc3ViamVjdHMpIG9uIDIwIGNhcGFjaXRpZXMgKHdpdGhpbiBzdWJqZWN0cykuIChTZWUgV2Vpc21hbiwgRHdlY2ssICYgTWFya21hbiwgMjAxOCwgX1Byb2MuIENvZ1NjaV8uKQoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjQ5fQpkXzc5ICU+JQogIG1lYW5fY2VudF9mdW4oImNoYXJhY3RlciIsIGFnZV9ncm91cCA9ICJjaGlsZHJlbiIpICU+JQogIGdhdGhlcihjaGFyYWN0ZXIsIG1lYW5fY2VudCwgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwgbGV2ZWxzID0gY2hhcmFjdGVyX25hbWVzX2NoKSkgJT4lCiAgZ2dwbG90KGFlcyh5ID0gY2FwYWNpdHksIHggPSBjaGFyYWN0ZXIsIGZpbGwgPSBtZWFuX2NlbnQpKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gImJsYWNrIiwgaGlnaCA9ICJ3aGl0ZSIsICMgbGltaXRzID0gYygtMiwgMiksCiAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDE1KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSkpICsKICBsYWJzKHRpdGxlID0gIlJhdyBkYXRhOiA3LSB0byA5LXllYXItb2xkIGNoaWxkcmVuIiwKICAgICAgIHN1YnRpdGxlID0gIjkgY2hhcmFjdGVycywgMjAgY2FwYWNpdGllcyIsCiAgICAgICB5ID0gIkNhcGFjaXR5IiwKICAgICAgIHggPSAiQ2hhcmFjdGVyIiwKICAgICAgIGZpbGwgPSAiTWVhbiByYXRpbmciKQpgYGAKCiMjIyA0LTZ5byBjaGlsZHJlbgoKSW4gdGhpcyBzdHVkeSwgMTI0IDQtIHRvIDYteWVhci1vbGQgVVMgY2hpbGRyZW4gcmF0ZWQgOSBjaGFyYWN0ZXJzIChiZXR3ZWVuLXN1YmplY3RzKSBvbiAyMCBjYXBhY2l0aWVzICh3aXRoaW4gc3ViamVjdHMpLiAoU2VlIFdlaXNtYW4sIER3ZWNrLCAmIE1hcmttYW4sIDIwMTgsIF9Qcm9jLiBDb2dTY2lfLikKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KZF80NiAlPiUKICBtZWFuX2NlbnRfZnVuKCJjaGFyYWN0ZXIiLCBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW4iKSAlPiUKICBnYXRoZXIoY2hhcmFjdGVyLCBtZWFuX2NlbnQsIC1jYXBhY2l0eSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsIGxldmVscyA9IGNoYXJhY3Rlcl9uYW1lc19jaCkpICU+JQogIGdncGxvdChhZXMoeSA9IGNhcGFjaXR5LCB4ID0gY2hhcmFjdGVyLCBmaWxsID0gbWVhbl9jZW50KSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJibGFjayIsIGhpZ2ggPSAid2hpdGUiLCAjIGxpbWl0cyA9IGMoLTIsIDIpLAogICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAxNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpKSArCiAgbGFicyh0aXRsZSA9ICJSYXcgZGF0YTogNC0gdG8gNi15ZWFyLW9sZCBjaGlsZHJlbiIsCiAgICAgICBzdWJ0aXRsZSA9ICI5IGNoYXJhY3RlcnMsIDIwIGNhcGFjaXRpZXMiLAogICAgICAgeSA9ICJDYXBhY2l0eSIsCiAgICAgICB4ID0gIkNoYXJhY3RlciIsCiAgICAgICBmaWxsID0gIk1lYW4gcmF0aW5nIikKYGBgCgoKIyMgU1ZEIHsudGFic2V0fQoKIyMjIEFkdWx0cwoKYGBge3J9CnN2ZDRfYWQgPC0gc3ZkKGRfYWQgJT4lIAogICAgICAgICAgICAgICAgIG1lYW5fY2VudF9mdW4oImNoYXJhY3RlciIsIGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUKICAgICAgICAgICAgICAgICBjb2x1bW5fdG9fcm93bmFtZXMoImNhcGFjaXR5IiksCiAgICAgICAgICAgICAgIG5yb3coZF9hZCksIG5yb3coZF9hZCkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjQ5fQpwbG90X3JlY29uc3RydWN0X2Z1bihzdmQ0X2FkLCB0cmFuc3Bvc2UgPSBUUlVFLCAiYWR1bHRzIikgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICM0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZWNvbnN0cnVjdGVkIGRhdGFzZXQ6IFN1bSBvZiBvdXRlciBwcm9kdWN0cyAoVSwgVikgbXVsdGlwbGllZCBieSBTIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KcGxvdF9VX2Z1bihzdmQ0X2FkLCAiYWR1bHRzIiwgdHJhbnNwb3NlID0gVFJVRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICM0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJVOiBGZWF0dXJlIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSB4IFM6IEZlYXR1cmUgdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfU19mdW4oc3ZkNF9hZCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICM0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJTOiBTaW5ndWxhciB2YWx1ZXMgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KcGxvdF9WX2Z1bihzdmQ0X2FkLCAiYWR1bHRzIiwgdHJhbnNwb3NlID0gVFJVRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBBZHVsdHMgKEFwcHJvYWNoICM0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJWOiBJdGVtIHZlY3RvcnMgKGJ5IG1vZGUpIiwKICAgICAgICMgc3VidGl0bGUgPSAiViB4IFM6IEl0ZW0gdmVjdG9ycyBtdWx0aXBsaWVkIGJ5IHNpbmd1bGFyIHZhbHVlIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgojIyMjIFBsb3R0aW5nIGluIGRpbWVuc2lvbnMgey50YWJzZXR9CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClVfZnVuKHN2ZDRfYWQsICJhZHVsdHMiLCBUUlVFLCBUUlVFKSAlPiUKICBmaWx0ZXIobW9kZSAlaW4lIGMoIm1vZGVfMDEiLCAibW9kZV8wMiIpKSAlPiUKICBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gcHJvcGVydHkpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMykpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgMykpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IEFkdWx0cyAoQXBwcm9hY2ggIzQpIiwKICAgICAgIHN1YnRpdGxlID0gIlUgWCBTOiBDYXBhY2l0aWVzIGluIGZpcnN0IHR3byBtb2RlcyIsCiAgICAgICB4ID0gIk1vZGUgMSIsIHkgPSAiTW9kZSAyIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNjd9ClZfZnVuKHN2ZDRfYWQsICJhZHVsdHMiLCBUUlVFLCBUUlVFKSAlPiUKICBmaWx0ZXIobW9kZSAlaW4lIGMoIm1vZGVfMDEiLCAibW9kZV8wMiIpKSAlPiUKICBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gaXRlbSkpICsKICBnZW9tX3BvaW50KCkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbChzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAzKSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAzKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgIyBjb29yZF9lcXVhbCgpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQWR1bHRzIChBcHByb2FjaCAjMikiLAogICAgICAgc3VidGl0bGUgPSAiViBYIFM6IENoYXJhY3RlcnMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCgojIyMgQ2hpbGRyZW4sIDctOXkKCmBgYHtyfQpzdmQ0Xzc5IDwtIHN2ZChkXzc5ICU+JSAKICAgICAgICAgICAgICAgICBtZWFuX2NlbnRfZnVuKCJjaGFyYWN0ZXIiLCBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW4iKSAlPiUKICAgICAgICAgICAgICAgICBjb2x1bW5fdG9fcm93bmFtZXMoImNhcGFjaXR5IiksCiAgICAgICAgICAgICAgIG5yb3coZF83OSksIG5yb3coZF83OSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxLjQ5fQpwbG90X3JlY29uc3RydWN0X2Z1bihzdmQ0Xzc5LCB0cmFuc3Bvc2UgPSBUUlVFLCAiY2hpbGRyZW4iKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA3LTl5IChBcHByb2FjaCAjNCkiLAogICAgICAgc3VidGl0bGUgPSAiUmVjb25zdHJ1Y3RlZCBkYXRhc2V0OiBTdW0gb2Ygb3V0ZXIgcHJvZHVjdHMgKFUsIFYpIG11bHRpcGxpZWQgYnkgUyIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEuNDl9CnBsb3RfVV9mdW4oc3ZkNF83OSwgImNoaWxkcmVuIiwgdHJhbnNwb3NlID0gVFJVRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzQpIiwKICAgICAgIHN1YnRpdGxlID0gIlU6IEZlYXR1cmUgdmVjdG9ycyAoYnkgbW9kZSkiLAogICAgICAgIyBzdWJ0aXRsZSA9ICJVIHggUzogRmVhdHVyZSB2ZWN0b3JzIG11bHRpcGxpZWQgYnkgc2luZ3VsYXIgdmFsdWUgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KcGxvdF9TX2Z1bihzdmQ0Xzc5KSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA3LTl5IChBcHByb2FjaCAjNCkiLAogICAgICAgc3VidGl0bGUgPSAiUzogU2luZ3VsYXIgdmFsdWVzIChieSBtb2RlKSIsCiAgICAgICB4ID0gIiIsIHkgPSAiIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDF9CnBsb3RfVl9mdW4oc3ZkNF83OSwgImNoaWxkcmVuIiwgdHJhbnNwb3NlID0gVFJVRSwgbXVsdGlwbHkgPSBGQUxTRSkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNy05eSAoQXBwcm9hY2ggIzQpIiwKICAgICAgIHN1YnRpdGxlID0gIlY6IEl0ZW0gdmVjdG9ycyAoYnkgbW9kZSkiLAogICAgICAgIyBzdWJ0aXRsZSA9ICJWIHggUzogSXRlbSB2ZWN0b3JzIG11bHRpcGxpZWQgYnkgc2luZ3VsYXIgdmFsdWUgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCiMjIyMgUGxvdHRpbmcgaW4gZGltZW5zaW9ucyB7LnRhYnNldH0KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KVV9mdW4oc3ZkNF83OSwgImNoaWxkcmVuIiwgVFJVRSwgVFJVRSkgJT4lCiAgZmlsdGVyKG1vZGUgJWluJSBjKCJtb2RlXzAxIiwgIm1vZGVfMDIiKSkgJT4lCiAgc2VsZWN0KC1TKSAlPiUKICBzcHJlYWQobW9kZSwgdmFsdWUpICU+JQogIGdncGxvdChhZXMoeCA9IG1vZGVfMDEsIHkgPSBtb2RlXzAyLCBsYWJlbCA9IHByb3BlcnR5KSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC41KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogICMgY29vcmRfZXF1YWwoKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA3LTl5IChBcHByb2FjaCAjNCkiLAogICAgICAgc3VidGl0bGUgPSAiVSBYIFM6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KVl9mdW4oc3ZkNF83OSwgImNoaWxkcmVuIiwgVFJVRSwgVFJVRSkgJT4lCiAgZmlsdGVyKG1vZGUgJWluJSBjKCJtb2RlXzAxIiwgIm1vZGVfMDIiKSkgJT4lCiAgc2VsZWN0KC1TKSAlPiUKICBzcHJlYWQobW9kZSwgdmFsdWUpICU+JQogIGdncGxvdChhZXMoeCA9IG1vZGVfMDEsIHkgPSBtb2RlXzAyLCBsYWJlbCA9IGl0ZW0pKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjUpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMTAwLCAxMDAsIC41KSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgIyBjb29yZF9lcXVhbCgpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDctOXkgKEFwcHJvYWNoICMyKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJWIFggUzogQ2hhcmFjdGVycyBpbiBmaXJzdCB0d28gbW9kZXMiLAogICAgICAgeCA9ICJNb2RlIDEiLCB5ID0gIk1vZGUgMiIpCmBgYAoKCiMjIyBDaGlsZHJlbiwgNC02eQoKYGBge3J9CnN2ZDRfNDYgPC0gc3ZkKGRfNDYgJT4lIAogICAgICAgICAgICAgICAgIG1lYW5fY2VudF9mdW4oImNoYXJhY3RlciIsIGFnZV9ncm91cCA9ICJjaGlsZHJlbiIpICU+JQogICAgICAgICAgICAgICAgIGNvbHVtbl90b19yb3duYW1lcygiY2FwYWNpdHkiKSwKICAgICAgICAgICAgICAgbnJvdyhkXzQ2KSwgbnJvdyhkXzQ2KSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMywgZmlnLmFzcCA9IDEuNDl9CnBsb3RfcmVjb25zdHJ1Y3RfZnVuKHN2ZDRfNDYsIHRyYW5zcG9zZSA9IFRSVUUsICJjaGlsZHJlbiIpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDQtNnkgKEFwcHJvYWNoICM0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZWNvbnN0cnVjdGVkIGRhdGFzZXQ6IFN1bSBvZiBvdXRlciBwcm9kdWN0cyAoVSwgVikgbXVsdGlwbGllZCBieSBTIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMS40OX0KcGxvdF9VX2Z1bihzdmQ0XzQ2LCAiY2hpbGRyZW4iLCB0cmFuc3Bvc2UgPSBUUlVFLCBtdWx0aXBseSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjNCkiLAogICAgICAgc3VidGl0bGUgPSAiVTogRmVhdHVyZSB2ZWN0b3JzIChieSBtb2RlKSIsCiAgICAgICAjIHN1YnRpdGxlID0gIlUgeCBTOiBGZWF0dXJlIHZlY3RvcnMgbXVsdGlwbGllZCBieSBzaW5ndWxhciB2YWx1ZSAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDMsIGZpZy5hc3AgPSAxfQpwbG90X1NfZnVuKHN2ZDRfNDYpICsKICBsYWJzKHRpdGxlID0gIlNWRDogQ2hpbGRyZW4sIDQtNnkgKEFwcHJvYWNoICM0KSIsCiAgICAgICBzdWJ0aXRsZSA9ICJTOiBTaW5ndWxhciB2YWx1ZXMgKGJ5IG1vZGUpIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAzLCBmaWcuYXNwID0gMX0KcGxvdF9WX2Z1bihzdmQ0XzQ2LCAiY2hpbGRyZW4iLCB0cmFuc3Bvc2UgPSBUUlVFLCBtdWx0aXBseSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJTVkQ6IENoaWxkcmVuLCA0LTZ5IChBcHByb2FjaCAjNCkiLAogICAgICAgc3VidGl0bGUgPSAiVjogSXRlbSB2ZWN0b3JzIChieSBtb2RlKSIsCiAgICAgICAjIHN1YnRpdGxlID0gIlYgeCBTOiBJdGVtIHZlY3RvcnMgbXVsdGlwbGllZCBieSBzaW5ndWxhciB2YWx1ZSAoYnkgbW9kZSkiLAogICAgICAgeCA9ICIiLCB5ID0gIiIpCmBgYAoKIyMjIyBQbG90dGluZyBpbiBkaW1lbnNpb25zIHsudGFic2V0fQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3fQpVX2Z1bihzdmQ0XzQ2LCAiY2hpbGRyZW4iLCBUUlVFLCBGQUxTRSkgJT4lCiAgZmlsdGVyKG1vZGUgJWluJSBjKCJtb2RlXzAxIiwgIm1vZGVfMDIiKSkgJT4lCiAgIyBzZWxlY3QoLVMpICU+JQogIHNwcmVhZChtb2RlLCB2YWx1ZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW9kZV8wMSwgeSA9IG1vZGVfMDIsIGxhYmVsID0gcHJvcGVydHkpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjI1KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzQpIiwKICAgICAgIHN1YnRpdGxlID0gIlU6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgICMgc3VidGl0bGUgPSAiVSB4IFM6IENhcGFjaXRpZXMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42N30KVl9mdW4oc3ZkNF80NiwgImNoaWxkcmVuIiwgVFJVRSwgRkFMU0UpICU+JQogIGZpbHRlcihtb2RlICVpbiUgYygibW9kZV8wMSIsICJtb2RlXzAyIikpICU+JQogICMgc2VsZWN0KC1TKSAlPiUKICBzcHJlYWQobW9kZSwgdmFsdWUpICU+JQogIGdncGxvdChhZXMoeCA9IG1vZGVfMDEsIHkgPSBtb2RlXzAyLCBsYWJlbCA9IGl0ZW0pKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0xMDAsIDEwMCwgLjI1KSkgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoLTEwMCwgMTAwLCAuMjUpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICAjIGNvb3JkX2VxdWFsKCkgKwogIGxhYnModGl0bGUgPSAiU1ZEOiBDaGlsZHJlbiwgNC02eSAoQXBwcm9hY2ggIzIpIiwKICAgICAgIHN1YnRpdGxlID0gIlY6IENoYXJhY3RlcnMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgICMgc3VidGl0bGUgPSAiViBYIFM6IENoYXJhY3RlcnMgaW4gZmlyc3QgdHdvIG1vZGVzIiwKICAgICAgIHggPSAiTW9kZSAxIiwgeSA9ICJNb2RlIDIiKQpgYGAKCgo=